takumi3d
BACK TO NOTES
Unknown |
#Houdini#HeightField#Landscape#Layer#Mask#Scatter#TileSplice#Tips

UE HeightField マスクが一部にしか適用されない原因と対処法

概要

UE(Unreal Engine)から出力したLandscapeをHeightFieldとして処理する際、
マスクが一部にしか適用されない怪現象が発生することがある。

この問題は、HeightとMaskがLandscapeタイル単位で分離されたまま処理されていることが原因であり、
HeightField Tile Splice を使用することで解決できる。

注意
この問題は見た目では分かりづらく、後工程(Scatter / Mask処理)で初めて顕在化することが多い。

発生していた現象

UEから出力したHeightFieldをそのまま処理すると、
以下のように マスクが一部にしか反映されない 状態になる。

Houdini_HeightField_TileSplice_001.png

原因

この現象の原因は、
Height と Mask が Landscape タイルごとに分離された状態で存在していることにある。

  • HeightFieldが複数タイルに分割されている
  • 各タイルごとに height / mask が独立している
  • マスク処理がタイル単位でしか効かない その結果、全体にかけたつもりのマスクが
    一部のタイルにしか影響しない 状態になる。
Houdini_HeightField_TileSplice_002.png

解決方法:HeightField Tile Splice

このようなケースで有効なのが
HeightField Tile Splice ノード。

役割

  • 分離してしまった複数のLandscapeタイルを結合
  • Height / Mask を 単一のHeightFieldとして統合
  • タイル境界を意識せず処理可能にする
Houdini_HeightField_TileSplice_003.png

結果

HeightField Tile Splice を使用して統合した後にマスク処理を行うことで、
マスクが正しく全体に適用される ようになる。

Houdini_HeightField_TileSplice_005.jpeg Houdini_HeightField_TileSplice_004.png

Tips

実務上のポイント
  • UE Landscapeは内部的にタイル管理されている前提で考える
  • HeightField処理前に「タイルが分離していないか」を必ず確認
  • Erosion / Mask / Layer処理の前段で Tile Splice を挟むと安全

チェックリスト

  • HeightFieldが複数Primitiveに分かれていないか
  • Maskが意図した範囲にかかっているか
  • タイル境界で不自然な処理結果が出ていないか

まとめ

  • マスクが一部にしかかからない原因は Height / Mask のタイル分離
  • UE由来のHeightFieldでは特に起こりやすい
  • HeightField Tile Splice を使用することで
  • タイルを統合
  • Height / Maskを一元化
  • マスク分離問題を解消できる
  • HeightField処理の初期段階での統合が重要